Objectif

Vous familiariser avec l’importation de données Excel ou CSV dans un document RStudio de manière reproductible.

Prérequis

Procédure

Étape 1. Partez d’un document R, R Markdown ou encore R Notebook ouvert dans RStudio. Dans notre cas, un R Notebook est ouvert à partir du projet Oursins créé dans le tutoriel sur les projets RStudio. Insérer un chunk R. (Si l’on part réellement du tutoriel project RStudio, le rapport est déjà sauvegardé… cela ne correspond pas à la copie d’écran actuelle!)


Étape 2. Sélectionnez le bouton Import Dataset dans la barre d’outils de l’onglet Environment. Sélectionnez le type de fichier souhaité. Dans le cas présent, un fichier Excel (From Excel).


Étape 3. Une boite de dialogue s’ouvre. cliquez sur le bouton Browse….


Étape 4. Sélectionnez le jeu de donnée OursinsIni.xlsx qui se trouve dans le dossier data.


Étape 5. Le jeu de donnée s’affiche dans la boite de dialogue Import Excel Data. Cette boite de dialogue est subdivisée en trois zones :


Étape 6. Différents paramètres peuvent être employés afin d’importer le jeu de donnée correctement dans la partie Import Options. Il est crucial de bien les choisir :

La représentation des valeurs manquantes peut varier d’un fichier à l’autre. Il est important de spécifier le code employé dans la feuille Excel pour représenter ces valeurs manquantes.

Il est également intéressant de sélectionner le type de variable que le jeu de donnée comporte. Pour ce faire dans le compartiment Data Preview, sélectionnez le type de la variable (exemple : caractère, numérique, …)

Remarque : les fichiers CSV offrent un plus large panel de types de variables, mais il est toujours possible de retravailler les variables dans R après importation.


Étape 7. Copiez le code s’affichant dans la case Code Preview (la petite icône à droite en forme de presse-papier le réalise facilement, voir encadré bleu ci-dessous) et refermez la boite de dialogue d’importation en cliquant sur le bouton Cancel.

Attention : ne pas cliquer sur le bouton Import. Les données seront effectivement importées, mais les instructions qui effectuent cette importation seront perdues, et l’action ne sera donc pas reprise dans le document. Passer toujours par cette étape de copier-coller des instructions dans le document R Notebook, R Markdown, ou script R qui utilise ces données !


Étape 8. Collez les instructions dans le document cible. S’il s’agit d’un document R Markdown ou R Notebook, vous devez coller ces instructions à l’intérieur d’un chunk R (avec fond gris clair), et non pas dans une zone Markdown ou dans le préambule (avec fond blanc).

Dans le cadre de l’utilisation d’un projet (dans notre cas Oursins) que l’on souhaite portable, il est intéressant d’employer des chemin d’accès relatifs aux divers fichiers au lieu de chemins d’accès absolus. Le chemin d’accès relatif comporte plusieurs avantages :

Notre rapport se trouve dans le sous-dossier Rapports du dossier Oursins (qui est le dossier principal de notre projet), il faut donc indiquer qu’on sort du sous-dossier Rapports (naviguer vers le dossier parent en indiquant ..) pour entrer dans le sous-dossier Data. Cela s’écrit donc : ../Data/OursinsIni.xlsx.

Voir Tutoriel “gestion des fichiers dans un projet et les chemins relatifs”.


Étape 9. Exécutez les instructions. Dans un script R, vous cliquez sur le bouton Run de la barre d’outils de l’éditeur. Dans un document R Markdown ou R Notebook, comme ici, vous cliquez sur la flèche verte an haut à droite du chunk (encadré bleu).

Le jeu de données Oursins est importé dans R et il s’affiche dans l’onglet Environment. On peut voir immédiatement qu’il comporte 100 observations (lignes dans le tableau) pour 7 variables (colonnes).

Félicitations ! Vous venez d’importer votre premier jeu de données, et vous avez réalisé cette importation de manière reproductible et portable au sein de votre projet Oursins. La même technique peut être utilisée pour importer des données dans d’autres formats, tels que des données provenant des logiciels statistiques SAS, SPSS ou Stata, ainsi que des données au format CSV (nous vous conseillons dans ce cas de chosir la seconde option From Text (readr) plus performante).


Pour aller plus loin…

TODO

Copyright © 2017-2018, Guyliann Engels & Philippe Grosjean, Attribution-NonCommercial-ShareAlike 4.0 (CC BY-NC-SA 4.0).

LS0tCnRpdGxlOiAiVHV0b3JpZWwgU0RELVVNT05TIDogSW1wb3J0YXRpb24gZGVzIGRvbm7DqWVzIgphdXRob3I6ICJFbmdlbHMgR3V5bGlhbm4gJiBHcm9zamVhbiBQaGlsaXBwZSIKZGF0ZTogIlZlcnNpb24gMS4xIC0gYXZyaWwgMjAxOCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IAogICAgaGlnaGxpZ2h0OiBrYXRlCiAgICB0aGVtZTogc3BhY2VsYWIKLS0tCgoKIyMgT2JqZWN0aWYKCj4gVm91cyBmYW1pbGlhcmlzZXIgYXZlYyBsJ2ltcG9ydGF0aW9uIGRlIGRvbm7DqWVzIEV4Y2VsIG91IENTViBkYW5zIHVuIGRvY3VtZW50IFJTdHVkaW8gZGUgbWFuacOocmUgcmVwcm9kdWN0aWJsZS4KCgojIyBQcsOpcmVxdWlzCgoqIMOKdHJlIMOgIGwnYWlzZSBhdmVjIFJTdHVkaW8gOiB2b2lyIHR1dG9yaWVsICJwcmlzZSBlbiBtYWluIGRlIGxhIG1hY2hpbmUgdmlydHVlbGxlIGV0IGRlIFJTdHVkaW8iCiogw4p0cmUgY2FwYWJsZSBkZSBjcsOpZXIgdW4gcHJvamV0IGRhbnMgUlN0dWRpbyA6IHZvaXIgdHV0b3JpZWwgInV0aWxpc2F0aW9uIGRlcyBwcm9qZXRzIGRhbnMgUlN0dWRpbyIKCgojIyBQcm9jw6lkdXJlCgoqKsOJdGFwZSAxLioqIFBhcnRleiBk4oCZdW4gZG9jdW1lbnQgUiwgUiBNYXJrZG93biBvdSBlbmNvcmUgUiBOb3RlYm9vayBvdXZlcnQgZGFucyBSU3R1ZGlvLiBEYW5zIG5vdHJlIGNhcywgdW4gUiBOb3RlYm9vayBlc3Qgb3V2ZXJ0IMOgIHBhcnRpciBkdSBwcm9qZXQgYE91cnNpbnNgIGNyw6nDqSBkYW5zIGxlIHR1dG9yaWVsIHN1ciBsZXMgcHJvamV0cyBSU3R1ZGlvLiBJbnPDqXJlciB1biAqKmNodW5rIFIqKi4gKCoqU2kgbCdvbiBwYXJ0IHLDqWVsbGVtZW50IGR1IHR1dG9yaWVsIHByb2plY3QgUlN0dWRpbywgbGUgcmFwcG9ydCBlc3QgZMOpasOgIHNhdXZlZ2FyZMOpLi4uIGNlbGEgbmUgY29ycmVzcG9uZCBwYXMgw6AgbGEgY29waWUgZCfDqWNyYW4gYWN0dWVsbGUhKiopCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTAwLnBuZykKCi0tLS0KCioqw4l0YXBlIDIuKiogU8OpbGVjdGlvbm5leiBsZSBib3V0b24gKipJbXBvcnQgRGF0YXNldCoqIGRhbnMgbGEgYmFycmUgZCdvdXRpbHMgZGUgbCdvbmdsZXQgKipFbnZpcm9ubWVudCoqLiBTw6lsZWN0aW9ubmV6IGxlIHR5cGUgZGUgZmljaGllciBzb3VoYWl0w6kuIERhbnMgbGUgY2FzIHByw6lzZW50LCB1biBmaWNoaWVyIEV4Y2VsICgqKkZyb20gRXhjZWwqKikuIAoKIVtdKGZpZ3VyZXMvaW1wb3J0X2RhdGEwMS5wbmcpCgotLS0tCgoqKsOJdGFwZSAzLioqIFVuZSBib2l0ZSBkZSBkaWFsb2d1ZSBz4oCZb3V2cmUuIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiAqKkJyb3dzZS4uLioqLgoKIVtdKGZpZ3VyZXMvaW1wb3J0X2RhdGEwMi5wbmcpCgotLS0tCgoqKsOJdGFwZSA0LioqIFPDqWxlY3Rpb25uZXogbGUgamV1IGRlIGRvbm7DqWUgYE91cnNpbnNJbmkueGxzeGAgcXVpIHNlIHRyb3V2ZSBkYW5zIGxlIGRvc3NpZXIgYGRhdGFgLgoKIVtdKGZpZ3VyZXMvaW1wb3J0X2RhdGEwMy5wbmcpCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTA0LnBuZykKCi0tLS0KCioqw4l0YXBlIDUuKiogTGUgamV1IGRlIGRvbm7DqWUgc+KAmWFmZmljaGUgZGFucyBsYSBib2l0ZSBkZSBkaWFsb2d1ZSAqKkltcG9ydCBFeGNlbCBEYXRhKiouIENldHRlIGJvaXRlIGRlIGRpYWxvZ3VlIGVzdCBzdWJkaXZpc8OpZSBlbiB0cm9pcyB6b25lcyA6CgotICoqRGF0YSBQcmV2aWV3KiogOiBwcsOpdmlzdWFsaXNhdGlvbiBkZXMgZG9ubsOpZXMsCi0gKipJbXBvcnQgT3B0aW9ucyoqIDogb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIChjYWRyZSBibGV1KSBldAotICoqQ29kZSBQcmV2aWV3KiogOiBwcsOpdmlzdWFsaXNhdGlvbiBkZXMgaW5zdHJ1Y3Rpb25zIHBvdXIgbCdpbXBvcnRhdGlvbiAoY2FkcmUgb3JhbmdlKS4KCiFbXShmaWd1cmVzL2ltcG9ydF9kYXRhMDUucG5nKQoKLS0tLQoKKirDiXRhcGUgNi4qKiBEaWZmw6lyZW50cyBwYXJhbcOodHJlcyBwZXV2ZW50IMOqdHJlIGVtcGxvecOpcyBhZmluIGQnaW1wb3J0ZXIgbGUgamV1IGRlIGRvbm7DqWUgY29ycmVjdGVtZW50IGRhbnMgbGEgcGFydGllICoqSW1wb3J0IE9wdGlvbnMqKi4gSWwgZXN0IGNydWNpYWwgZGUgYmllbiBsZXMgY2hvaXNpciA6CgotICoqTmFtZSoqIDogbGUgbm9tIGRlIGxhIHZhcmlhYmxlCi0gKipGaXJzdCBSb3cgYXMgTmFtZXMqKiA6IG9wdGlvbiDDoCBjb2NoZXIgc2kgbGEgcHJlbWnDqHJlIGxpZ25lIGVzdCBjb21wb3PDqWUgZGVzIG5vbXMgZGVzIGNvbG9ubmVzCi0gKipTaGVldCoqIDogc8OpbGVjdGlvbm5lciBsYSBmZXVpbGxlIGR1IGNsYXNzZXVyIEV4Y2VsIHF1ZSBsJ29uIHNvdWhhaXRlIGVtcGxveWVyCi0gKipOQSoqIDogaW5kaXF1ZXIgbGEgbWFuacOocmUgZG9udCBsZXMgdmFsZXVycyBtYW5xdWFudGVzIHNvbnQgcmVwcsOpc2VudMOpZXMgZGFucyBsYSBmZXVpbGxlIEV4Y2VsCi0gKipTa2lwKiogOiBsZSBub21icmUgZGUgcHJlbWnDqHJlcyBsaWduZXMgw6AgaWdub3JlciAocGFyIGV4ZW1wbGUsIHNpIGVsbGVzIGNvbnRpZW5uZW50IGRlcyBtw6l0YWRvbm7DqWVzLCBvdSBzaSBsZSB0YWJsZWF1IGNvbW1lbmNlIHBsdXMgYmFzIGRhbnMgbGEgZmV1aWxsZSBFeGNlbCkKLSAqKk9wZW4gRGF0YSBWaWV3ZXIqKiA6IHBlcm1ldCBkZSBzw6lsZWN0aW9ubmVyIG91IGTDqXPDqWxlY3Rpb25uZXIgbCdhZmZpY2hhZ2UgZGVzIGRvbm7DqWVzCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTA2LTEucG5nKQoKTGEgcmVwcsOpc2VudGF0aW9uIGRlcyB2YWxldXJzIG1hbnF1YW50ZXMgcGV1dCB2YXJpZXIgZCd1biBmaWNoaWVyIMOgIGwnYXV0cmUuIElsIGVzdCBpbXBvcnRhbnQgZGUgc3DDqWNpZmllciBsZSBjb2RlIGVtcGxvecOpIGRhbnMgbGEgZmV1aWxsZSBFeGNlbCBwb3VyIHJlcHLDqXNlbnRlciBjZXMgdmFsZXVycyBtYW5xdWFudGVzLgoKIVtdKGZpZ3VyZXMvaW1wb3J0X2RhdGEwNi0yLnBuZykKCklsIGVzdCDDqWdhbGVtZW50IGludMOpcmVzc2FudCBkZSBzw6lsZWN0aW9ubmVyIGxlIHR5cGUgZGUgdmFyaWFibGUgcXVlIGxlIGpldSBkZSBkb25uw6llIGNvbXBvcnRlLiBQb3VyIGNlIGZhaXJlIGRhbnMgbGUgY29tcGFydGltZW50ICoqRGF0YSBQcmV2aWV3KiosIHPDqWxlY3Rpb25uZXogbGUgdHlwZSBkZSBsYSB2YXJpYWJsZSAoZXhlbXBsZSA6IGNhcmFjdMOocmUsIG51bcOpcmlxdWUsIC4uLikgCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTA2LTMucG5nKQoKKipSZW1hcnF1ZSA6KiogbGVzIGZpY2hpZXJzIENTViBvZmZyZW50IHVuIHBsdXMgbGFyZ2UgcGFuZWwgZGUgdHlwZXMgZGUgdmFyaWFibGVzLCBtYWlzIGlsIGVzdCB0b3Vqb3VycyBwb3NzaWJsZSBkZSByZXRyYXZhaWxsZXIgbGVzIHZhcmlhYmxlcyBkYW5zIFIgYXByw6hzIGltcG9ydGF0aW9uLiAKCi0tLS0KCioqw4l0YXBlIDcuKiogQ29waWV6IGxlIGNvZGUgc+KAmWFmZmljaGFudCBkYW5zIGxhIGNhc2UgKipDb2RlIFByZXZpZXcqKiAobGEgcGV0aXRlIGljw7RuZSDDoCBkcm9pdGUgZW4gZm9ybWUgZGUgcHJlc3NlLXBhcGllciBsZSByw6lhbGlzZSBmYWNpbGVtZW50LCB2b2lyIGVuY2FkcsOpIGJsZXUgY2ktZGVzc291cykgZXQgcmVmZXJtZXogbGEgYm9pdGUgZGUgZGlhbG9ndWUgZOKAmWltcG9ydGF0aW9uIGVuIGNsaXF1YW50IHN1ciBsZSBib3V0b24gKipDYW5jZWwqKi4KCiFbXShmaWd1cmVzL2ltcG9ydF9kYXRhMDcucG5nKQoKPiBBdHRlbnRpb24gOiBuZSAqKnBhcyoqIGNsaXF1ZXIgc3VyIGxlIGJvdXRvbiAqKkltcG9ydCoqLiBMZXMgZG9ubsOpZXMgc2Vyb250IGVmZmVjdGl2ZW1lbnQgaW1wb3J0w6llcywgbWFpcyBsZXMgaW5zdHJ1Y3Rpb25zIHF1aSBlZmZlY3R1ZW50IGNldHRlIGltcG9ydGF0aW9uIHNlcm9udCBwZXJkdWVzLCBldCBsJ2FjdGlvbiBuZSBzZXJhIGRvbmMgcGFzIHJlcHJpc2UgZGFucyBsZSBkb2N1bWVudC4gUGFzc2VyIHRvdWpvdXJzIHBhciBjZXR0ZSDDqXRhcGUgZGUgY29waWVyLWNvbGxlciBkZXMgaW5zdHJ1Y3Rpb25zIGRhbnMgbGUgZG9jdW1lbnQgUiBOb3RlYm9vaywgUiBNYXJrZG93biwgb3Ugc2NyaXB0IFIgcXVpIHV0aWxpc2UgY2VzIGRvbm7DqWVzICEKCi0tLS0KCioqw4l0YXBlIDguKiogQ29sbGV6IGxlcyBpbnN0cnVjdGlvbnMgZGFucyBsZSBkb2N1bWVudCBjaWJsZS4gUydpbCBzJ2FnaXQgZCd1biBkb2N1bWVudCBSIE1hcmtkb3duIG91IFIgTm90ZWJvb2ssIHZvdXMgX2RldmV6XyBjb2xsZXIgY2VzIGluc3RydWN0aW9ucyDDoCBsJ2ludMOpcmlldXIgZCd1biBjaHVuayBSIChhdmVjIGZvbmQgZ3JpcyBjbGFpciksIGV0IG5vbiBwYXMgZGFucyB1bmUgem9uZSBNYXJrZG93biBvdSBkYW5zIGxlIHByw6lhbWJ1bGUgKGF2ZWMgZm9uZCBibGFuYykuCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTA4LnBuZykKCkRhbnMgbGUgY2FkcmUgZGUgbCd1dGlsaXNhdGlvbiBkJ3VuIHByb2pldCAoZGFucyBub3RyZSBjYXMgYE91cnNpbnNgKSBxdWUgbCdvbiBzb3VoYWl0ZSBwb3J0YWJsZSwgaWwgZXN0IGludMOpcmVzc2FudCBkJ2VtcGxveWVyIGRlcyBjaGVtaW4gZCdhY2PDqHMgcmVsYXRpZnMgYXV4IGRpdmVycyBmaWNoaWVycyBhdSBsaWV1IGRlIGNoZW1pbnMgZCdhY2PDqHMgYWJzb2x1cy4gTGUgY2hlbWluIGQnYWNjw6hzIHJlbGF0aWYgY29tcG9ydGUgcGx1c2lldXJzIGF2YW50YWdlcyA6IAoKLSBVbiBjaGVtaW4gZCdhY2PDqHMgcGx1cyBjb3VydCDDoCDDqWNyaXJlCi0gVW5lIHBsdXMgZ3JhbmRlIHBvcnRhYmlsaXTDqS4gTCfDqWNoYW5nZSBkZSBkb2N1bWVudCBlbnRyZSBjb2xsYWJvcmF0ZXVycyBzZSBmZXJhIGFsb3JzIHNhbnMgcHJvYmzDqG1lcyBjYXIgbGVzIGNoZW1pbnMgcmVsYXRpZnMgcG9pbnRlbnQgdmVycyBkZXMgZmljaGllcnMgw6AgbCdpbnTDqXJpZXVyIGR1IHByb2pldCAqKnF1ZWwgcXVlIHNvaXQgbCdlbmRyb2l0IG/DuSBsZSBwcm9qZXQgc2Ugc2l0dWUgc3VyIGxlIGRpc3F1ZSoqLCDDoCBsJ2ludmVyc2UgZGVzIGNoZW1pbnMgYWJzb2x1cyBxdWkgbsOpY2Vzc2l0ZW50IGRlIHRvdWpvdXJzIHBsYWNlciBsZSBwcm9qZXQgZXhhY3RlbWVudCBhdSBtw6ptZSBlbmRyb2l0LiBNYWxoZXVyZXVzZW1lbnQsIGxhIGJvaXRlIGRlIGRpYWxvZ3VlIGQnaW1wb3J0YXRpb24gY3LDqWUgZGVzIGluc3RydWN0aW9ucyBxdWkgdXRpbGlzZW50IHVuIGNoZW1pbiBhYnNvbHUgdmVycyBsZSBmaWNoaWVyIMOgIGltcG9ydGVyLiBJbCBmYXV0IGRvbmMsIGxlIHRyYW5zZm9ybWVyIMOgIGxhIG1haW4uIExhIGNvcGllIGQnw6ljcmFuIGNpLWRlc3NvdXMgbW9udHJlIChlbmNhZHLDqSBibGV1KSB0cm9pcyBpbnN0cnVjdGlvbnMgc3VjY2Vzc2l2ZXMgcXVpIGltcG9ydGVudCBsZSBtw6ptZSBmaWNoaWVyIGRlIGRvbm7DqWVzLiBMYSBwcmVtacOocmUgZXN0IHVuIGNoZW1pbiBhYnNvbHUsIGxhIHNlY29uZGUgdXRpbGlzZSB1biBjaGVtaW4gZGVwdWlzIGxlIHLDqXBlcnRvaXJlIGRlIGwndXRpbGlzYXRldXIgKG5vdGUgYH5gKSwgZXQgbGEgdHJvaXNpw6htZSB1dGlsaXNlIHVuIGNoZW1pbiByZWxhdGlmLiAqKkMnZXN0IGNldHRlIHRyb2lzacOobWUgZm9ybWUgcXVlIHZvdXMgZGV2ZXogdXRpbGlzZXIgc3lzdMOpbWF0aXF1ZW1lbnQgZGFucyBkZXMgcHJvamV0cyBwb3J0YWJsZXMsIGMnZXN0LcOgLWRpcmUsIHRvdXMgdm9zIHByb2pldHMgISoqCgohW10oZmlndXJlcy9pbXBvcnRfZGF0YTA5LnBuZykKCk5vdHJlIHJhcHBvcnQgc2UgdHJvdXZlIGRhbnMgbGUgc291cy1kb3NzaWVyIGBSYXBwb3J0c2AgZHUgZG9zc2llciBgT3Vyc2luc2AgKHF1aSBlc3QgbGUgZG9zc2llciBwcmluY2lwYWwgZGUgbm90cmUgcHJvamV0KSwgaWwgZmF1dCBkb25jIGluZGlxdWVyIHF1J29uIHNvcnQgZHUgc291cy1kb3NzaWVyIGBSYXBwb3J0c2AgKG5hdmlndWVyIHZlcnMgbGUgZG9zc2llciBwYXJlbnQgZW4gaW5kaXF1YW50IGAuLmApIHBvdXIgZW50cmVyIGRhbnMgbGUgc291cy1kb3NzaWVyIGBEYXRhYC4gQ2VsYSBzJ8OpY3JpdCBkb25jIDogYC4uL0RhdGEvT3Vyc2luc0luaS54bHN4YC4KCj4gVm9pciBUdXRvcmllbCAiZ2VzdGlvbiBkZXMgZmljaGllcnMgZGFucyB1biBwcm9qZXQgZXQgbGVzIGNoZW1pbnMgcmVsYXRpZnMiLgoKLS0tLQoKKirDiXRhcGUgOS4qKiBFeMOpY3V0ZXogbGVzIGluc3RydWN0aW9ucy4gRGFucyB1biBzY3JpcHQgUiwgdm91cyBjbGlxdWV6IHN1ciBsZSBib3V0b24gKipSdW4qKiBkZSBsYSBiYXJyZSBkJ291dGlscyBkZSBsJ8OpZGl0ZXVyLiBEYW5zIHVuIGRvY3VtZW50IFIgTWFya2Rvd24gb3UgUiBOb3RlYm9vaywgY29tbWUgaWNpLCB2b3VzIGNsaXF1ZXogc3VyIGxhIGZsw6hjaGUgdmVydGUgYW4gaGF1dCDDoCBkcm9pdGUgZHUgY2h1bmsgKGVuY2FkcsOpIGJsZXUpLgoKIVtdKGZpZ3VyZXMvaW1wb3J0X2RhdGExMC5wbmcpCgpMZSBqZXUgZGUgZG9ubsOpZXMgYE91cnNpbnNgIGVzdCBpbXBvcnTDqSBkYW5zICoqUioqIGV0IGlsIHMnYWZmaWNoZSBkYW5zIGwnb25nbGV0ICoqRW52aXJvbm1lbnQqKi4gT24gcGV1dCB2b2lyIGltbcOpZGlhdGVtZW50IHF1J2lsIGNvbXBvcnRlIDEwMCBvYnNlcnZhdGlvbnMgKGxpZ25lcyBkYW5zIGxlIHRhYmxlYXUpIHBvdXIgNyB2YXJpYWJsZXMgKGNvbG9ubmVzKS4KCl9Gw6lsaWNpdGF0aW9ucyAhIFZvdXMgdmVuZXogZCdpbXBvcnRlciB2b3RyZSBwcmVtaWVyIGpldSBkZSBkb25uw6llcywgZXQgdm91cyBhdmV6IHLDqWFsaXPDqSBjZXR0ZSBpbXBvcnRhdGlvbiBkZSBtYW5pw6hyZSAqKnJlcHJvZHVjdGlibGUqKiBldCAqKnBvcnRhYmxlKiogYXUgc2VpbiBkZSB2b3RyZSBwcm9qZXQgYE91cnNpbnNgLiBMYSBtw6ptZSB0ZWNobmlxdWUgcGV1dCDDqnRyZSB1dGlsaXPDqWUgcG91ciBpbXBvcnRlciBkZXMgZG9ubsOpZXMgZGFucyBkJ2F1dHJlcyBmb3JtYXRzLCB0ZWxzIHF1ZSBkZXMgZG9ubsOpZXMgcHJvdmVuYW50IGRlcyBsb2dpY2llbHMgc3RhdGlzdGlxdWVzIFNBUywgU1BTUyBvdSBTdGF0YSwgYWluc2kgcXVlIGRlcyBkb25uw6llcyBhdSBmb3JtYXQgQ1NWIChub3VzIHZvdXMgY29uc2VpbGxvbnMgZGFucyBjZSBjYXMgZGUgY2hvc2lyIGxhIHNlY29uZGUgb3B0aW9uICoqRnJvbSBUZXh0IChyZWFkcikqKiBwbHVzIHBlcmZvcm1hbnRlKS5fCgotLS0tCgoKIyMgUG91ciBhbGxlciBwbHVzIGxvaW4uLi4KCioqVE9ETyoqCgpfQ29weXJpZ2h0IMKpIDIwMTctMjAxOCwgR3V5bGlhbm4gRW5nZWxzICYgUGhpbGlwcGUgR3Jvc2plYW4sIFtBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgNC4wIChDQyBCWS1OQy1TQSA0LjApXShodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtc2EvNC4wL2RlZWQuZnIpLl8K